SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


CREATE Proc [dbo].[SP_TXMVTO_CNTB_I48]        
/*------------------------------------------------------------*/          
/*----- Empresa          : OFISIS S.A.                    ----*/          
/*----- Cliente          : OFISIS S.A.                    ----*/          
/*----- Sistema          : Contabilidad                   ----*/          
/*----- Modulo           : Empresa                        ----*/          
/*----- Programa         : Distribucion Cuentas           ----*/          
/*----- Script           : TXMVTO_CNTB                    ----*/          
/*----- Nombre           : SP_TXMVTO_CNTB_I48             ----*/          
/*----- Desarrollado por : OFISIS                         ----*/          
/*----- Fecha            : 17/05/2006                     ----*/          
/*----- Base de Datos    : MS SQL Server                  ----*/          
/*----- Version          : 7.0                            ----*/          
/*----- Invoca a SP      :                                ----*/          
/*------------------------------------------------------------*/          
/*---------------------------------------------------------------------*/      
/*----- Modificado 4 por : percy garcia                           -----*/      
/*----- Fecha Modifica   : 18/05/2006                             -----*/      
/*----- Detalle Modifica : no considera otras operaciones de distribucion en cursor-----*/      
/*---------------------------------------------------------------------*/        
 /*------------------------------------------------------------*/          
/*----- Drop proc SP_TXMVTO_CNTB_I48                      ----*/          
/*----- Grant ALL  on SP_TXMVTO_CNTB_I48 to public     ----*/          
/*----- SP_TXMVTO_CNTB_I48 ''01'', 1, ''001'', ''025'', 2000, 2 ----*/          
/*------------------------------------------------------------*/                
@ISCO_EMPR         TD_VC_002,          
@ISCO_USUA          TD_VC_008,      
@IDFE_USUA          TD_DT_001,      
@INNU_CNTB_EMPR    TD_IN_001,          
@ISCO_UNID_CNTB    TD_VC_003,          
---@ISCO_OPRC_ANTE    TD_VC_003,          
@INNU_ANNO         TD_IN_004_ANNO,          
@INNU_MESE         TD_IN_002_MESE          
          
As          
           
 Begin tran SP_TXMVTO_CNTB_I48        
          
 Declare          
  @CSCO_CNTA_EMPR   TD_VC_020_CNTA,          
  @CSTI_AUXI_EMPR   TD_VC_001,          
  @CSCO_AUXI_EMPR   TD_VC_020,          
  @CSCO_ORDE_SERV   TD_VC_020,          
  @CSCO_CNTA_DEST   TD_VC_020,          
  @CNIM_MVTO_DIST   TD_NU_016_004,          
  @CNIM_MVTO_CNTB   TD_NU_016_004,          
  @VSCO_OPRC_CNTB   TD_VC_003,          
  @VSNU_ASTO        TD_VC_010,          
  @VNNU_SECU        TD_IN_002,          
  @VSCO_MONE        TD_VC_003,          
  @VSTI_OPER        TD_VC_003,           
  @VSDE_GLOS        TD_VC_100,          
  @VNIM_TOTA        TD_NU_016_004,          
  @VSCO_CADE_0001   TD_VC_100,          
  @VSCO_CADE_0002   TD_VC_100,          
  @VNNU_ASTO        TD_IN_001,          
  @VSCO_CNTA_TEMP   TD_VC_020_CNTA,          
  @VSTI_AUXI_TEMP   TD_VC_001,          
  @VSCO_AUXI_TEMP   TD_VC_020,           
  @VSCO_ORDE_TEMP   TD_VC_020,           
  @VNIM_MVTO_TEMP   TD_NU_016_004,          
  @VNNU_ULTI_ASTO   TD_IN_001,          
-- Nuevas Variables          
  @VSID_GANA_REDO   TD_VC_003,          
  @VSID_PERD_REDO   TD_VC_003,          
  @VSCO_GANA_REDO   TD_VC_020,          
  @VSCO_PERD_REDO   TD_VC_020,          
  @VNNU_FACT_REDO   TD_NU_015_006,          
  @VNTO_SALD        TD_NU_016_004,          
  @VDFE_ASTO_CNTB   TD_DT_001,
  @VSCO_OPRC_AUXI   TD_VC_003,
  @VSCO_OPRC_ACTI   TD_VC_003


-- AUXILIAR 
Select @VSCO_OPRC_AUXI = ''
Select @VSCO_OPRC_AUXI = IsNull(CO_OPRC_CNTB,'') 
From TTIDEN_OPER 
Where CO_EMPR = @ISCO_EMPR 
And NU_CNTB_EMPR = @INNU_CNTB_EMPR 
And ID_OPRC = '022'         

-- ACTIVIDAD
Select @VSCO_OPRC_ACTI = ''
Select @VSCO_OPRC_ACTI = IsNull(CO_OPRC_CNTB,'') 
From TTIDEN_OPER 
Where CO_EMPR = @ISCO_EMPR 
And NU_CNTB_EMPR = @INNU_CNTB_EMPR 
And ID_OPRC = '023'
             
Declare CU_TXMVTO_CNTB_I48_1 Cursor          
 For          
  Select t2.CO_CNTA_EMPR, t2.TI_AUXI_EMPR, t2.CO_AUXI_EMPR, t2.CO_ORDE_SERV, t1.CO_CNTA_DEST,           
         Round((max(t1.PO_DIST) * Isnull(sum(PATINDEX(t2.TI_OPER,'CAR') * Isnull(t2.IM_MVTO_CNTB, 0) - PATINDEX(t2.TI_OPER,'ABO') * Isnull(t2.IM_MVTO_CNTB, 0)), 0)) / 100, 2),          
         Round(Isnull(sum(PATINDEX(t2.TI_OPER,'CAR') * Isnull(t2.IM_MVTO_CNTB, 0) - PATINDEX(t2.TI_OPER,'ABO') * Isnull(t2.IM_MVTO_CNTB, 0)), 0),2)           
   from TTCNTA_DIST t1, TXMVTO_CNTB t2          
  where t1.CO_EMPR = @ISCO_EMPR and          
        t1.NU_ANNO = @INNU_ANNO and          
        t1.NU_MESE = @INNU_MESE and          
        t2.CO_EMPR = t1.CO_EMPR and          
        t2.NU_CNTB_EMPR = @INNU_CNTB_EMPR and          
        t2.CO_OPRC_CNTB Not In (@VSCO_OPRC_AUXI, @VSCO_OPRC_ACTI) and            
        t2.NU_ANNO = t1.NU_ANNO and          
        t2.NU_MESE = t1.NU_MESE and          
        t2.CO_CNTA_EMPR = t1.CO_CNTA_ORIG And           
        t2.SI_MVTO_CNTB = 'APR'          
  group by t2.CO_CNTA_EMPR, t2.TI_AUXI_EMPR, t2.CO_AUXI_EMPR,           
           t2.CO_ORDE_SERV, t1.CO_CNTA_DEST          
  order by t2.CO_CNTA_EMPR, t2.TI_AUXI_EMPR, t2.CO_AUXI_EMPR,           
           t2.CO_ORDE_SERV, t1.CO_CNTA_DEST          
          
 Select  @VSCO_MONE = CO_MONE,          
         @VNNU_FACT_REDO = NU_FACT_REDO,           
  @VSID_GANA_REDO = ID_GANA_REDO,           
  @VSID_PERD_REDO = ID_PERD_REDO          
   from TTCNTB_EMPR          
 where CO_EMPR = @ISCO_EMPR          
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR          
          
 Select @VSCO_OPRC_CNTB = CO_OPRC_CNTB          
   from TTIDEN_OPER          
  where CO_EMPR = @ISCO_EMPR          
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR          
   and ID_OPRC = '032'          
          
 Select @VSCO_GANA_REDO = CO_CNTA_EMPR          
   from TTIDEN_CNTA   where CO_EMPR = @ISCO_EMPR          
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR    and ID_CNTA = @VSID_GANA_REDO          
          
 Select @VSCO_PERD_REDO = CO_CNTA_EMPR          
   from TTIDEN_CNTA   where CO_EMPR = @ISCO_EMPR          
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR    and ID_CNTA = @VSID_PERD_REDO          
          
 Delete TXMVTO_CNTB          
  where CO_EMPR = @ISCO_EMPR          
  and NU_CNTB_EMPR = @INNU_CNTB_EMPR          
  and CO_OPRC_CNTB = @VSCO_OPRC_CNTB          
  and NU_ANNO = @INNU_ANNO          
  and NU_MESE = @INNU_MESE          
          
  if @@error <> 0          
   Begin          
    Rollback Tran SP_TXMVTO_CNTB_I48        
    Return          
   End         
          

 Update TCFECH_PROC          
  set NU_ULTI_ASTO = 0,    
  CO_USUA_MODI =  @ISCO_USUA,    
  FE_USUA_MODI  = @IDFE_USUA    
  where CO_EMPR = @ISCO_EMPR          
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR          
  -- and CO_UNID_CNTB = @ISCO_UNID_CNTB          
   and CO_OPRC_CNTB = @VSCO_OPRC_CNTB          
   and NU_ANNO = @INNU_ANNO          
   and NU_MESE = @INNU_MESE         
          
  if @@error <> 0          
   Begin          
    Rollback Tran SP_TXMVTO_CNTB_I48        
    Return          
   End          
          
 Set @VNNU_SECU = 1          
 Set @VNNU_ASTO = 1          
 Set @VSDE_GLOS = 'ASIENTO DISTRIBUCION CUENTA'
 SELECT @VDFE_ASTO_CNTB = getdate()          
          
 Open CU_TXMVTO_CNTB_I48_1          
 Fetch CU_TXMVTO_CNTB_I48_1 into @CSCO_CNTA_EMPR, @CSTI_AUXI_EMPR,           
   @CSCO_AUXI_EMPR, @CSCO_ORDE_SERV, @CSCO_CNTA_DEST, @CNIM_MVTO_DIST, @CNIM_MVTO_CNTB          
           
 Set @VSCO_CADE_0001 = Rtrim(ltrim(@CSCO_CNTA_EMPR)) + Rtrim(ltrim(IsNull(@CSTI_AUXI_EMPR,''))) +           
                       Rtrim(ltrim(IsNull(@CSCO_AUXI_EMPR,''))) + Rtrim(ltrim(IsNull(@CSCO_ORDE_SERV,'')))     
          
 Set @VSCO_CADE_0002 = Rtrim(ltrim(@CSCO_CNTA_EMPR)) + Rtrim(ltrim(IsNull(@CSTI_AUXI_EMPR,''))) +           
                       Rtrim(ltrim(IsNull(@CSCO_AUXI_EMPR,''))) + Rtrim(ltrim(IsNull(@CSCO_ORDE_SERV,'')))          
 If @@Fetch_Status = 0          
 Begin          
 While @@Fetch_Status = 0          
  Begin          
          
  Set @VSCO_CADE_0001 = Rtrim(ltrim(@CSCO_CNTA_EMPR)) + Rtrim(ltrim(IsNull(@CSTI_AUXI_EMPR,''))) +           
                        Rtrim(ltrim(IsNull(@CSCO_AUXI_EMPR,''))) + Rtrim(ltrim(IsNull(@CSCO_ORDE_SERV,'')))          
          
   If @VSCO_CADE_0001 != @VSCO_CADE_0002          
    Begin          
             
    if @VNIM_MVTO_TEMP > 0          
     Set @VSTI_OPER = 'ABO'          
    Else          
     Set @VSTI_OPER = 'CAR'           
      ---inserta la reversion de la cuenta       
    Insert into TXMVTO_CNTB(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB, NU_ANNO,          
         NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB, CO_CNTA_EMPR, TI_AUXI_EMPR, CO_AUXI_EMPR,          
         TI_DOCU, NU_DOCU, FE_DOCU, FE_DOCU_VENC, TI_CAMB, CO_MONE, FA_CAMB, FA_CAMB_DIAR,          
         TI_OPER, IM_MVTO_ORIG, IM_MVTO_CNTB, DE_GLOS, TI_DOCU_REFE, NU_DOCU_REFE, FE_DOCU_REFE,          
         NO_GIRA, FE_ENTR_CHEQ, FE_PROG_CHEQ, CO_ORDE_SERV, SI_MVTO_CNTB,          
         CO_UNID_ORIG, CO_OPRC_ORIG, NU_ASTO_ORIG, ST_OTRS, NU_PROC, NU_PROC_SECU,           
         ST_IMPR_CHEQ, ST_FLAG, ST_GEST, ST_REDO, CO_USUA_MODI, FE_USUA_MODI, CO_USUA_CREA, FE_USUA_CREA)    
     Values(@ISCO_EMPR, @INNU_CNTB_EMPR, @ISCO_UNID_CNTB, @VSCO_OPRC_CNTB, @INNU_ANNO,           
         @INNU_MESE, @VSNU_ASTO, @VNNU_SECU, Convert(DateTime, Convert(Varchar, getdate(), 103), 103), @VSCO_CNTA_TEMP, NullIf(Rtrim(Ltrim(@VSTI_AUXI_TEMP)),''),          
         NullIf(Rtrim(Ltrim(@VSCO_AUXI_TEMP)),''), NULL, NULL, NULL, NULL, 'PAC',  @VSCO_MONE,          
         1.000000, 1.000000, @VSTI_OPER, Abs(@VNIM_MVTO_TEMP), Abs(@VNIM_MVTO_TEMP), @VSDE_GLOS, NULL, NULL, NULL,          
         NULL, NULL, NULL, NullIf(Rtrim(Ltrim(@VSCO_ORDE_TEMP)),''), 'APR',           
         NULL, NULL, NULL, NULL, NULL, NULL,          
         'N', NULL, 'N', 'N', @ISCO_USUA , @IDFE_USUA, @ISCO_USUA, @IDFE_USUA)          
           
      if @@error <> 0          
        Begin          
          close CU_TXMVTO_CNTB_I48_1          
          deallocate CU_TXMVTO_CNTB_I48_1          
          Rollback Tran SP_TXMVTO_CNTB_I48        
          Return          
        End          
          
      Exec SP_TXMVTO_CNTB_I25 @ISCO_EMPR, @ISCO_USUA , @IDFE_USUA, @INNU_CNTB_EMPR,@ISCO_UNID_CNTB,          
  @VSCO_OPRC_CNTB,@INNU_ANNO,@INNU_MESE,@VSNU_ASTO          
          
     Set @VNNU_ASTO = @VNNU_ASTO + 1             
     Set @VNNU_SECU = 1          
                  
     Set @VSCO_CADE_0002 = Rtrim(ltrim(@CSCO_CNTA_EMPR)) + Rtrim(ltrim(IsNull(@CSTI_AUXI_EMPR,''))) +           
                           Rtrim(ltrim(IsNull(@CSCO_AUXI_EMPR,''))) + Rtrim(ltrim(IsNull(@CSCO_ORDE_SERV,'')))          
    End            
          
    if @CNIM_MVTO_DIST > 0          
     Set @VSTI_OPER = 'CAR'          
    Else              
     Set @VSTI_OPER = 'ABO'          
          
   Select @VSNU_ASTO = substring('0000000000', 1, 10 - datalength(rtrim(ltrim(convert(varchar, @VNNU_ASTO))))) +           
      convert(varchar, @VNNU_ASTO)          
          -- inserta las cuentas destinos 
    Insert into TXMVTO_CNTB(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB, NU_ANNO,          
         NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB, CO_CNTA_EMPR, TI_AUXI_EMPR, CO_AUXI_EMPR,          
         TI_DOCU, NU_DOCU, FE_DOCU, FE_DOCU_VENC, TI_CAMB, CO_MONE, FA_CAMB, FA_CAMB_DIAR,          
         TI_OPER, IM_MVTO_ORIG, IM_MVTO_CNTB, DE_GLOS, TI_DOCU_REFE, NU_DOCU_REFE, FE_DOCU_REFE,          
         NO_GIRA, FE_ENTR_CHEQ, FE_PROG_CHEQ, CO_ORDE_SERV, SI_MVTO_CNTB,           
         CO_UNID_ORIG, CO_OPRC_ORIG, NU_ASTO_ORIG, ST_OTRS, NU_PROC, NU_PROC_SECU,           
         ST_IMPR_CHEQ, ST_FLAG, ST_GEST, ST_REDO, CO_USUA_MODI, FE_USUA_MODI, CO_USUA_CREA, FE_USUA_CREA)    
    Values(@ISCO_EMPR, @INNU_CNTB_EMPR, @ISCO_UNID_CNTB, @VSCO_OPRC_CNTB, @INNU_ANNO,           
         @INNU_MESE, @VSNU_ASTO, @VNNU_SECU, Convert(DateTime, Convert(Varchar, getdate(), 103), 103), @CSCO_CNTA_DEST, NullIf(Rtrim(Ltrim(@CSTI_AUXI_EMPR)),''),           
         NullIf(Rtrim(Ltrim(@CSCO_AUXI_EMPR)),''), NULL, NULL, NULL, NULL, 'PAC',  @VSCO_MONE,          
         1.000000, 1.000000, @VSTI_OPER, Abs(@CNIM_MVTO_DIST), Abs(@CNIM_MVTO_DIST), @VSDE_GLOS, NULL, NULL, NULL,          
         NULL, NULL, NULL, NullIf(Rtrim(Ltrim(@CSCO_ORDE_SERV)),''), 'APR',           
         NULL, NULL, NULL, NULL, NULL, NULL,          
         'N', NULL, 'N', 'N', @ISCO_USUA , @IDFE_USUA, @ISCO_USUA, @IDFE_USUA)    
          
      if @@error <> 0          
        Begin          
          close CU_TXMVTO_CNTB_I48_1          
          deallocate CU_TXMVTO_CNTB_I48_1          
          Rollback Tran SP_TXMVTO_CNTB_I48        
          Return          
        End          
          
    Set @VNNU_SECU = @VNNU_SECU + 1          
    Set @VSCO_CNTA_TEMP = @CSCO_CNTA_EMPR          
    Set @VSTI_AUXI_TEMP = @CSTI_AUXI_EMPR          
    Set @VSCO_AUXI_TEMP = @CSCO_AUXI_EMPR          
    Set @VSCO_ORDE_TEMP = @CSCO_ORDE_SERV          
    Set @VNIM_MVTO_TEMP = @CNIM_MVTO_CNTB          
           

   Fetch CU_TXMVTO_CNTB_I48_1 into @CSCO_CNTA_EMPR, @CSTI_AUXI_EMPR,           
     @CSCO_AUXI_EMPR, @CSCO_ORDE_SERV, @CSCO_CNTA_DEST, @CNIM_MVTO_DIST, @CNIM_MVTO_CNTB          
 End           
          
  if @CNIM_MVTO_CNTB > 0          
   Set @VSTI_OPER = 'ABO'          
  Else          
   Set @VSTI_OPER = 'CAR'           
     --- inserta la reversion
  Insert into TXMVTO_CNTB(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB, NU_ANNO,          
    NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB, CO_CNTA_EMPR, TI_AUXI_EMPR, CO_AUXI_EMPR,          
    TI_DOCU, NU_DOCU, FE_DOCU, FE_DOCU_VENC, TI_CAMB, CO_MONE, FA_CAMB, FA_CAMB_DIAR,          
    TI_OPER, IM_MVTO_ORIG, IM_MVTO_CNTB, DE_GLOS, TI_DOCU_REFE, NU_DOCU_REFE, FE_DOCU_REFE,          
    NO_GIRA, FE_ENTR_CHEQ, FE_PROG_CHEQ, CO_ORDE_SERV, SI_MVTO_CNTB,           
    CO_UNID_ORIG, CO_OPRC_ORIG, NU_ASTO_ORIG, ST_OTRS, NU_PROC, NU_PROC_SECU,           
    ST_IMPR_CHEQ, ST_FLAG, ST_GEST, ST_REDO, CO_USUA_MODI, FE_USUA_MODI, CO_USUA_CREA, FE_USUA_CREA)    
  Values(@ISCO_EMPR, @INNU_CNTB_EMPR, @ISCO_UNID_CNTB, @VSCO_OPRC_CNTB, @INNU_ANNO,           
    @INNU_MESE, @VSNU_ASTO, @VNNU_SECU, Convert(DateTime, Convert(Varchar, getdate(), 103), 103), @VSCO_CNTA_TEMP, NullIf(Rtrim(Ltrim(@VSTI_AUXI_TEMP)),''),          
    NullIf(Rtrim(Ltrim(@VSCO_AUXI_TEMP)),''), NULL, NULL, NULL, NULL, 'PAC',  @VSCO_MONE,          
    1.000000, 1.000000, @VSTI_OPER, Abs(@VNIM_MVTO_TEMP), Abs(@VNIM_MVTO_TEMP), @VSDE_GLOS, NULL, NULL, NULL,          
    NULL, NULL, NULL, NullIf(Rtrim(Ltrim(@VSCO_ORDE_TEMP)),''), 'APR', NULL, NULL, NULL, NULL, NULL, NULL,          
    'N', NULL, 'N', 'N', @ISCO_USUA , @IDFE_USUA, @ISCO_USUA, @IDFE_USUA)    
              
    if @@error <> 0          
     Begin          
      close CU_TXMVTO_CNTB_I48_1          
      deallocate CU_TXMVTO_CNTB_I48_1          
      Rollback Tran SP_TXMVTO_CNTB_I48        
      Return          
     End          
          
    Exec SP_TXMVTO_CNTB_I25 @ISCO_EMPR, @ISCO_USUA , @IDFE_USUA, @INNU_CNTB_EMPR,@ISCO_UNID_CNTB,          
  @VSCO_OPRC_CNTB,@INNU_ANNO,@INNU_MESE,@VSNU_ASTO          
          
close CU_TXMVTO_CNTB_I48_1          
deallocate CU_TXMVTO_CNTB_I48_1          
          
 Update TCFECH_PROC          
   set NU_ULTI_ASTO = @VNNU_ASTO,    
    CO_USUA_MODI =  @ISCO_USUA,    
    FE_USUA_MODI  = @IDFE_USUA    
  where CO_EMPR = @ISCO_EMPR          
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR          
   and CO_UNID_CNTB = @ISCO_UNID_CNTB          
   and CO_OPRC_CNTB = @VSCO_OPRC_CNTB          
   and NU_ANNO = @INNU_ANNO          
   and NU_MESE = @INNU_MESE          
          
   if @@error <> 0          
    Begin          
     Rollback Tran SP_TXMVTO_CNTB_I48        
     Return          
    End          
End          
Else          
Begin          
     close CU_TXMVTO_CNTB_I48_1          
     deallocate CU_TXMVTO_CNTB_I48_1          
End          
commit tran SP_TXMVTO_CNTB_I48        
return          
/*------------------------- Fin ------------------------------*/       






GO
